package com.woniuxy.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniuxy.admin.entity.AdminAccount;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.admin.dto.AdminAccountDto;
import com.woniuxy.admin.dto.AdminAccountPageDto;
import com.woniuxy.admin.form.*;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ...
 * @since 2024年05月22日
 */
public interface AdminAccountService extends IService<AdminAccount> {

    /**
     * 注册管理员
     * @param form
     * @throws InterruptedException
     */
    void registAdmin(RegistAdminForm form) throws InterruptedException;

    /**
     * 管理员登录
     * @param form
     * @return
     */
    AdminAccountDto adminLogin(AdminLoginForm form);

    /**
     * 管理员验证码登录
     * @param form
     * @return
     */
    AdminAccountDto adminCodeLogin(AdminCodeLoginForm form);



    /**
     * 查询所有管理员信息
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<AdminAccountPageDto> loadAllAdminAccount(Integer pageNum, Integer pageSize,String condition);

    /**
     * 根据角色Id 查出账号集合
     * @param roleId
     * @return
     */
    List<Integer> selectAccountsByRoleId(Integer roleId);

    /**
     * 发送管理员登录验证码
     * @param adminPhone
     */
    void sendAdminLoginCode(String adminPhone);

    /**
     * 发送管理修改手机短信
     * @return
     */
    void sendAdminUpdatePhone(Integer accountId, String adminPhone);

    /**
     * 发送管理修改新手机短信
     * @return
     */
    void sendAdminUpdateNewPhone(Integer accountId, String adminPhone);

    /**
     * 管理修改手机号
     * @param accountId
     * @param form
     * @return
     */
    void adminUpdatePhone(Integer accountId, AdminUpdatePhoneForm form);

    /**
     * 修改密码
     * @param accountId
     * @param form
     * @return
     */
    void adminUpdatePass(Integer accountId, AdminUpdatePassForm form);

    /**
     * 根据角色Id 查询账号详情
     * @param roleId
     * @return
     */
    List<AdminAccountPageDto> selectAccountInfoByRoleId(Integer roleId);

    /**
     * 根据用户名查找账户信息
     * @param adminName 用户名
     * @return 管理员信息
     */
    AdminAccount selectAccountByAdminName(String adminName);

    /**
     * 更新管理员状态
     * @param accountId
     * @param state
     */
    void updateAdminAccountState(Integer accountId, Integer state) throws Exception;
}
